#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/9/28 9:35
# @Author  : 朱宽
# @File    : jsAssistance.py
# @Software: Win10、Python3.8.5 and Pycharm
'''
封装了一些通用的 调用JS语句的方法
'''
class jsAssistance():
    '''
    定义了：
    1、调用js，单击元素
    2、调用js，滚动条滚动到页面底部（向下）
    3、调用js，滚动条滚动到页面顶部（向上）
    4、调用js，滚动条滚动到页面底部（向下）
    5、调用js，滚动条滚动到页面顶部（向上）
    6、调用js，纵向滚动条滚动到页面中部
    7、调用js，滚动水平滚动条到页面中部
    8、调用js，滚动到具体页面元素可见位置（传入element）
    9、调用js，滚动条滚动到页面底部（向下）
    '''
    def __init__(self, driver):
        self.driver = driver

    def single_click(self, element):
        '''
        1、调用js，单击元素
        :param element:
        :return:
        '''
        try:
            #  判断页面元素状态
            if element.is_enabled() and element.is_displayed():
                #  调用js单击元素
                self.driver.execute_script("arguments[0].click();", element)
            else:
                print("该元素不可点击")
        except Exception as e:
            raise e

    def scroll_to_bottom(self):
        """
        2、调用js，滚动条滚动到页面底部
        :return:
        """
        self.driver.execute_script("document.documentElement.scrollTop=10000")

    def scroll_to_top(self):
        """
        3、调用js，滚动条滚动到页面顶部
        :return:
        """
        self.driver.execute_script("document.documentElement.scrollTop=0")

    def scrolltobottom(self):
        """
        4、调用js，滚动条滚动到页面底部
        :return:
        """
        self.driver.execute_script("window.scrollTo(0,100000)")

    def scrolltotop(self):
        """
        5、调用js，滚动条滚动到页面顶部
        :return:
        """
        self.driver.execute_script("window.scrollTo(0,1)")

    def vertical_to_middle(self):
        """
        6、调用js，纵向滚动条滚动到页面中部
        :return:
        """
        self.driver.execute_script("window.scrollBy(0, 0-document.body.scrollHeight *1/2)")

    def horizontal_to_middle(self):
        """
        7、调用js，滚动水平滚动条到页面中部
        :return:
        """
        self.driver.execute_script("window.scrollBy(0, 0-document.body.scrollWidht *1/2)")

    def scroll_to_element(self, element):
        """
        8、调用js，滚动到具体页面元素可见位置
        :param element:
        :return:
        """
        self.driver.execute_script("arguments[0].scrollIntoView(true);", element)

    def scroll_to_bottom_page(self):
        """
        9、调用js，滚动条滚动到页面底部
        :return:
        """
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
if __name__ == '__main__':
    from selenium import webdriver
    import time

    chrome_driver = webdriver.Chrome()
    chrome_driver.get("http://www.baidu.com")
    chrome_driver.find_element_by_id("kw").send_keys("davieyang")
    chrome_driver.find_element_by_id("su").click()

    jsAssistance(chrome_driver).scroll_to_bottom()
    time.sleep(3)
    jsAssistance(chrome_driver).scroll_to_top()
    time.sleep(3)
    element=chrome_driver.find_element_by_xpath("//*[@id='page']/div/a[3]/span[2]")
    jsAssistance(chrome_driver).scroll_to_element(element)
    time.sleep(3)
    jsAssistance(chrome_driver).scroll_to_bottom_page()
    time.sleep(3)
    jsAssistance(chrome_driver).scrolltotop()
    time.sleep(3)
    jsAssistance(chrome_driver).scrolltobottom()
    time.sleep(3)
    element = chrome_driver.find_element_by_xpath("//*[@id='help']/a[3]")
    jsAssistance(chrome_driver).single_click(element)
    time.sleep(3)
    chrome_driver.quit()